const axios = require('axios');
const cheerio = require('cheerio'); // 使用 cheerio 解析 HTML
const Novel = require('../sql/novel'); // 引入 Novel 模型
const Chapter = require('../sql/chapter'); // 引入 Chapter 模型

async function scrapeWebsite() {
  try {
    const { data } = await axios.get('https://www.tzkczc.com/class/1_1/');
    const $ = cheerio.load(data); // 加载 HTML 数据

    // 打印 id 为 newscontent 的元素内容
    const newsContent = $('#newscontent'); // 获取指定元素

    // 提取 newsContent 下 li 元素中的 span 数据
    const liElements = newsContent.find('li');
    const spanData = [];

    liElements.each((index, li) => {
        const spans = $(li).find('span.s2'); // 只选择 class 为 s2 的 span 元素
        const spanValues = [];
        spans.each((spanIndex, span) => {
            const aTag = $(span).find('a');
            if (aTag.length > 0) {
                const link = aTag.attr('href');
                const linkText = aTag.text().trim();
                spanValues.push({ text: $(span).text().trim(), link: link, linkText: linkText });
            } else {
                spanValues.push({ text: $(span).text().trim(), link: null, linkText: null });
            }
        });
        spanData.push(spanValues);
    });
    const novels = []; // 添加一个数组来存储小说数据

    // 遍历 spanData 中的每个 link 并获取详细信息
    for (const spans of spanData) {
      for (const span of spans) {
        if (span.link) {
          const novelPage = await axios.get('https:'+span.link);
          const $ = cheerio.load(novelPage.data);
          // 获取小说封面图
          const coverImage = $('#fmimg img').attr('src');

          // 获取作者名
          const author = $('#info p a').attr('title');

          // 获取简介
          const summary = $('#intro').text().trim();

          // 获取最后更新时间
          const updatedAtText = $('#info p').last().text().trim(); // 获取 id 为 info 的最后一个 p 标签的值
          const updatedAt = new Date(updatedAtText); // 假设 updatedAtText 是一个有效的日期字符串

          // 创建小说记录对象
          const novelRecord = {
            title: span.linkText || '暂无标题', // 假设 linkText 是小说标题
            author: author || '暂无作者',
            summary: summary || '该作者未填写介绍',
            category: '都市言情', // 假设分类为未知
            coverImage: coverImage || '', // 小说封面图链接
            updatedAt: isNaN(updatedAt.getTime()) ? new Date() : updatedAt // 如果无法解析日期，则使用当前时间
          };

          // 检查数据库中是否已经存在相同的小说
          let novel = await Novel.findOne({ where: { title: novelRecord.title } });
          if (!novel) {
            // 如果不存在，则创建并保存小说记录到数据库
            novel = await Novel.create(novelRecord);
          } else {
            console.log(`Novel "${novelRecord.title}" already exists, skipping.`);
            continue; // 跳过当前小说的处理
          }

          // 获取所有章节信息
          const chapterRecords = [];
          $('#list dd a').each((index, element) => {
            const chapterTitle = $(element).text().trim();
            const chapterLink = $(element).attr('href');
            const chapterRecord = {
              title: chapterTitle || 'No title available',
              updatedAt: new Date(),
              link: chapterLink || 'No link available',
              novelId: novel.id, // 关联到小说的 ID
              content: null // 初始化内容为空
            };
            chapterRecords.push(chapterRecord);
          });

          // 创建并保存章节记录到数据库
          for (const chapterRecord of chapterRecords) {
            // 检查数据库中是否已经存在相同的章节
            let chapter = await Chapter.findOne({ where: { title: chapterRecord.title, } });
            if (!chapter) {
              // 获取章节详情页面的HTML内容
              const chapterPage = await axios.get('https:' + chapterRecord.link);
              const $ = cheerio.load(chapterPage.data);

              // 提取章节内容
              const chapterContent = $('#content').html(); // 获取 id 为 content 的元素内容
              // 将内容存储到 chapterRecord 中
              chapterRecord.content = JSON.stringify(chapterContent);
              // 保存章节记录到数据库
              await Chapter.create(chapterRecord);
            } else {
              console.log(`1Chapter "${chapterRecord.title}" already exists, skipping.`);
            }
          }

          console.log('Novel and chapter records created successfully');
        }
      }
    }

    // 打印所有小说记录
    console.log('All novel records:', novels);

  } catch (error) {
    console.error('Error scraping the website:', error);
  }
}

module.exports = scrapeWebsite; // 使用 CommonJS 导出方式